// 数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。

var generateParenthesis = function(n) {
    let arr = [];

    function def(left, right, path) {
        if (path.length == 2 * n) {
            arr.push(path);
            return;
        }
        if (left > 0) {
            def(left - 1, right, path + "(");
        }
        if (right > left) {
            def(left, right - 1, path + ")");
        }
    }
    def(n, n, "");
    return arr;
};

// 注意path+"("和path+")"不能现在函数外边，否则相当于生成了副本，使每条路线不同，造成结果不一致

// 注意不能写成2n的形式